#lang racket

(define make-stack
  (lambda ()
    (let ([ls '()]) ; initialize variable
      (lambda (msg arg) ; transfer parameter
        (case (msg)
          [('Empty? 'mt?)(null? ls)]
          ['push! (set! ls (cons (car arg) ls))]
          ['top (car ls)]
          ['pop! (set ls (cdr ls))]
          [else 'oops!])))))
